/* 
 * BasicBusiness.java
 * 
 * Data de criação: 12/02/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.core.business;

import br.com.o2solutions.core.exception.BusinessException;
import br.com.o2solutions.core.integration.repository.DataBaseIntegration;

/**
 * Interface que define os processos negociais relacionadas as Entidades do
 * sistema.
 * 
 * @param <T>
 *            Tipo do modelo que a implementação da Interface referencia
 * 
 * @author osvaldeir
 * @since 12/02/2010
 * 
 */
public interface BasicBusiness<T> {

	/**
	 * Persiste na base de Dados uma entidade do sistema.
	 * 
	 * @param entity
	 *            Entidade a ser persistida
	 * @throws BusinessException
	 *             Caso alguma regra negocial seja rompida. Ver pacote rule.
	 */
	public void save(T entity) throws BusinessException;

	/**
	 * Atualiza ou persiste um objeto na base de dados.
	 * 
	 * @param entity
	 *            Entidade a ser persistida ou atualizada.
	 * @throws BusinessException
	 *             Caso alguma regra negocial seja rompida. Ver pacote rule.
	 */
	public void saveOrUpdate(T entity) throws BusinessException;

	/**
	 * Atualiza uma Entidade na base de dados.
	 * 
	 * @param entity
	 *            Entidade a ser atualizada.
	 * @throws BusinessException
	 *             Caso alguma regra negocial seja rompida. Ver pacote rule.
	 */
	public void update(T entity) throws BusinessException;

	/**
	 * Remove da base de dados uma entidade.
	 * 
	 * @param entity
	 *            Entidade a ser removida
	 * @throws BusinessException
	 *             Caso alguma regra negocial seja rompida. Ver pacote rule.
	 */
	public void remove(T entity) throws BusinessException;

	/**
	 * Retorna o objeto de conexão com a base de dados relacionada a
	 * implementação negocial.
	 * 
	 * @return {@link DataBaseIntegration<T>} Objeto de conexão com a base de
	 *         dados.
	 */
	public DataBaseIntegration<T> getDataBaseIntegration();

}
